package java8;


public class LambdaTest6 {

    public static void main(String[] args) {

        Model m = new Model(99);
        Model m2 = new Model(77);
        Integer i = 88;

        //方法有一个参数，然后没返回类型,这里参数类型会自动识别
        Action<Model> a1 = (s) -> System.out.println("hello");
        a1.run(m);

        //注意:如果这里泛型类型不是Model 那么就不能引用Model中的方法
        //可以引用Model类中任意方法 只要满足一点:该方法没有参数
        //将来run方法中就会调用Model类型对象m的此处引用的方法


        Action<Model> a3 = m::test2;
        a3.run(m2);


        Action<Model> a4 = Model::test3;
    }

}

interface Action<T> {
    public void run(T t);
}

class Model {

    int a = 0;

    Model(int v) {
        a = v;
    }

    public void test1() {
        System.out.println(a);
    }

    public int test2(Model a) {
        System.out.println(this.a);
        System.out.println(a.a);
        return 1;
    }

    public int test3() {
        System.out.println(a);
        return 1;
    }

    public int test4(Integer a) {
        System.out.println(a);
        return 1;
    }


}